#ifndef DSFMT_PARAMS19937_H_
#define DSFMT_PARAMS19937_H_

#define DSFMT_POS1     117
#define DSFMT_SL1      19
#define DSFMT_MSK1     UINT64_C(0x000ffafffffffb3f)
#define DSFMT_MSK2     UINT64_C(0x000ffdfffc90fffd)
#define DSFMT_MSK32_1  0x000ffaffU
#define DSFMT_MSK32_2  0xfffffb3fU
#define DSFMT_MSK32_3  0x000ffdffU
#define DSFMT_MSK32_4  0xfc90fffdU
#define DSFMT_FIX1     UINT64_C(0x90014964b32f4329)
#define DSFMT_FIX2     UINT64_C(0x3b8d12ac548a7c7a)
#define DSFMT_PCV1     UINT64_C(0x3d84e1ac0dc82880)
#define DSFMT_PCV2     UINT64_C(0x0000000000000001)
#define DSFMT_IDSTR    "dSFMT2-19937:117-19:ffafffffffb3f-ffdfffc90fffd"

// Parameters for AltiVec
#if defined(__APPLE__)  // For OSX
#	define ALTI_SL1 (vector unsigned int)(3, 3, 3, 3)
#	define ALTI_SL1_PERM \
		(vector unsigned char)(2,3,4,5,6,7,30,30,10,11,12,13,14,15,0,1)
#	define ALTI_SL1_MSK \
		(vector unsigned int)(0xffffffffU,0xfff80000U,0xffffffffU,0xfff80000U)
#	define ALTI_MSK	(vector unsigned int)(DSFMT_MSK32_1, \
		DSFMT_MSK32_2, DSFMT_MSK32_3, DSFMT_MSK32_4)
#else  // For other OSs(Linux?)
#	define ALTI_SL1 {3, 3, 3, 3}
#	define ALTI_SL1_PERM \
		{2,3,4,5,6,7,30,30,10,11,12,13,14,15,0,1}
#	define ALTI_SL1_MSK \
		{0xffffffffU,0xfff80000U,0xffffffffU,0xfff80000U}
#	define ALTI_MSK \
		{DSFMT_MSK32_1, DSFMT_MSK32_2, DSFMT_MSK32_3, DSFMT_MSK32_4}
#endif

#endif
